home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1993 / Internet Info CD-ROM (Walnut Creek) (1993).iso / networking / ip / ka9q / osrc.arc / FINGER.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-04-16  |  1.5 KB  |  68 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "global.h"
  4. #include "mbuf.h"
  5. #include "socket.h"
  6. #include "session.h"
  7. #include "proc.h"
  8.  
  9. dofinger(argc,argv)
  10. int argc;
  11. char *argv[];
  12. {
  13.     struct sockaddr_in sock;
  14.     char *cp;
  15.     int s,i;
  16.     struct mbuf *bp;
  17.     struct session *sp;
  18.  
  19.     /* Allocate a session descriptor */
  20.     if((sp = newsession(argv[1],FINGER)) == NULLSESSION){
  21.         printf("Too many sessions\n");
  22.         return 1;
  23.     }
  24.     Current = sp;
  25.     Mode = CONV_MODE;
  26.     sp->cb.finger = Curproc;
  27.     sock.sin_family = AF_INET;
  28.     sock.sin_port = IPPORT_FINGER;
  29.     for(i=1;i<argc;i++){
  30.         cp = strchr(argv[i],'@');
  31.         if(cp == NULLCHAR){
  32.             printf("%s: local names not supported\n",argv[i]);
  33.             continue;
  34.         }
  35.         *cp++ = '\0';
  36.         printf("%s@%s -- ",argv[i],cp);
  37.         if((sock.sin_addr.s_addr = resolve(cp)) == 0){
  38.             printf("Host %s unknown\n",cp);
  39.             continue;
  40.         }
  41.         printf("trying %s",psocket((struct sockaddr *)&sock));
  42.         if((sp->s = s = socket(AF_INET,SOCK_STREAM,0)) == -1){
  43.             printf("Can't create socket\n");
  44.             break;
  45.         }
  46.         if(connect(s,(char *)&sock,sizeof(sock)) == -1){
  47.             cp = sockerr(s);
  48.             printf(" -- Connect failed: %s\n",cp != NULLCHAR ? cp : "");
  49.             close_s(s);
  50.             sp->s = -1;
  51.             continue;
  52.         }
  53.         printf("\n");
  54.         usprintf(s,"%s\r\n",argv[i]);
  55.         while(recv_mbuf(s,&bp,0,0,NULLCHAR,(int *)0) > 0){
  56.             /* Suspend output if we're not current */
  57.             while(Current != sp || Mode == CMD_MODE)
  58.                 pwait(sp);
  59.             write_p(stdout,bp);
  60.             free_p(bp);
  61.         }
  62.         close_s(s);
  63.         sp->s = -1;
  64.     }
  65.     freesession(sp);
  66.     return 0;
  67. }
  68.